package com.yugao.fintech.libra.system;

import com.yugao.fintech.libra.common.enums.ConfigDefineEnum;
import com.yugao.fintech.libra.common.enums.ConfigKeyEnum;
import com.yugao.fintech.libra.common.module.auth.LoginUser;
import com.yugao.fintech.libra.common.module.config.ConfigInfo;
import com.yugao.fintech.libra.system.model.entity.SysUser;
import com.yugao.fintech.libra.system.model.rqrs.accesskey.AccessKeyResp;
import com.yugao.fintech.libra.system.model.rqrs.config.ConfigResp;
import com.yugao.fintech.libra.system.model.rqrs.log.LoginUserGetReq;
import com.yugao.fintech.libra.system.model.rqrs.log.OperateLogSaveReq;
import com.yugao.fintech.libra.system.model.rqrs.tenant.TenantSaveReq;
import com.yugao.fintech.libra.system.model.rqrs.tenant.TenantUpdateReq;
import com.yugao.fintech.libra.system.model.rqrs.user.LoginUserDeleteReq;
import com.yugao.fintech.libra.system.model.rqrs.user.UserBasePageReq;
import com.yugao.fintech.libra.system.model.rqrs.user.UserResp;
import com.yugao.fintech.libra.system.model.rqrs.user.UserSaveReq;

import java.util.List;
import java.util.Map;

public interface SystemApi {
    /**
     * 获取密钥
     */
    AccessKeyResp getAccessKeyBySecretId(String secretId);

    AccessKeyResp getAccessKeyById(Long id);

    /**
     * 保存日志
     * @param req 日志实体
     */
    void saveOperateLog(OperateLogSaveReq req);


    /**
     * 通过用户名查询用户信息
     *
     * @return 结果
     */
    LoginUser getLoginUser(LoginUserGetReq req);

    /**
     * 创建用户
     */
    Long saveUser(UserSaveReq req);

    List<UserResp> listUser(UserBasePageReq query);

    List<UserResp> listUserByIds(List<Long> userIds);

    void removeUserById(Long userId);

    UserResp getUserById(Long userId);

    void deleteLoginUser(LoginUserDeleteReq req);

    /**
     * 创建租户
     */
    Long saveTenant(TenantSaveReq req);

    /**
     * 删除租户
     */
    void deleteTenant(Long tenantId);

    /**
     * 更新租户
     */
    void updateTenant(TenantUpdateReq req);


    /**
     * 获取配置
     */
    ConfigResp getConfig(ConfigKeyEnum configKey);

    /**
     * 获取使用的配置
     * @param configDefine 配置定义
     */
    ConfigInfo getUseConfig(ConfigDefineEnum configDefine);


    Map<String, List<String>> listAssignRoleUrl(List<Long> roleIds);

    /**
     * 通过账号获取用户
     * @param account 用户名/邮箱/手机号
     * @return 系统用户
     */
    SysUser getUserByAccount(String account);
}
